package com.demarc.pesquisas.negocio.entidade.entrevistado;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import com.demarc.pesquisas.negocio.entidade.AbstractPessoaEntrevistada;
import com.demarc.pesquisas.negocio.entidade.SimNaoEnum;

@Entity
@Table(name = "eto_entrevistado")
@AttributeOverrides(value = {
		@AttributeOverride(name = "nome", column = @Column(name = "eto_nome", nullable = false)),
		@AttributeOverride(name = "cpf", column = @Column(name = "eto_cpf")),
		@AttributeOverride(name = "rg", column = @Column(name = "eto_rg")),
		@AttributeOverride(name = "orgaoExpedidor", column = @Column(name = "eto_orgao_expedidor")),
		@AttributeOverride(name = "carteiraTrabalho", column = @Column(name = "eto_carteira_trabalho")),
		@AttributeOverride(name = "registroNascimento", column = @Column(name = "eto_registro_nascimento")),
		@AttributeOverride(name = "certificadoReservista", column = @Column(name = "eto_certificado_reservista")),
		@AttributeOverride(name = "telefone", column = @Column(name = "eto_telefone")),
		@AttributeOverride(name = "telefoneAuxiliar", column = @Column(name = "eto_telefone_auxiliar")),
		@AttributeOverride(name = "celular", column = @Column(name = "eto_celular")),
		@AttributeOverride(name = "celularAuxiliar", column = @Column(name = "eto_celular_auxiliar")),
		@AttributeOverride(name = "ultimaAtualizacao", column = @Column(name = "eto_ultima_atualizacao")),
		@AttributeOverride(name = "usuarioAtualizacao", column = @Column(name = "eto_usuario_atualizacao")) })
public class Entrevistado extends AbstractPessoaEntrevistada<Long> {

	public static final String ID = "eto_id";

	private Long id;
	private SimNaoEnum responsavel;

	public Entrevistado() {
		// Construtor default.
	}

	@Id
	@Column(name = ID)
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Enumerated(EnumType.STRING)
	@Column(name = "eto_responsavel", nullable = false)
	@NotNull
	public SimNaoEnum getResponsavel() {
		return responsavel;
	}

	public void setResponsavel(SimNaoEnum responsavel) {
		this.responsavel = responsavel;
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder().append(super.getCpf()).toHashCode();
	}

	@Override
	public boolean equals(Object obj) {
		boolean isEquals = false;

		if (obj == this) {
			isEquals = true;
		} else if (obj instanceof Entrevistado) {
			Entrevistado entrevistado = (Entrevistado) obj;
			isEquals = new EqualsBuilder().append(super.getCpf(),
					entrevistado.getCpf()).isEquals();
		}
		return isEquals;
	}
}
